package com.hsmpay.mobile.dao.terminal.impl;

import com.hsmpay.common.dao.Impl.BaseDaoSupport;
import com.hsmpay.mobile.dao.terminal.TchannelMDao;
import com.hsmpay.mobile.pojo.terminal.TchannelM;
import org.springframework.stereotype.Repository;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 终端通道商户号 dao接口
 */
@Repository("tchannelMDao")
public class TchannelMDaoImpl extends BaseDaoSupport<TchannelM, Long> implements TchannelMDao<TchannelM, Long> {

    /**
     * 根据终端代码  手机版正在使用的通道
     *
     * @param code
     * @param roleId
     * @return
     * @throws SQLException
     */
    public TchannelM searchMobileZZSYByCode(Integer code, Long roleId) throws SQLException {
        TchannelM tchannelM = new TchannelM();
        tchannelM.setCode(code);
        tchannelM.setClientType(2);
        tchannelM.setRoleId(roleId);
        tchannelM.setStatus(1);
        return searchEntity(tchannelM);
    }
    /**
     * 根据 code 查询通道商户号列表
     *
     * @param code
     * @param roleId
     * @return
     * @throws SQLException
     */
    public List<TchannelM> searchMobileTCListByCode(Integer code, Long roleId) throws SQLException {
        TchannelM tchannelM = new TchannelM();
        tchannelM.setCode(code);
        tchannelM.setClientType(2);
        tchannelM.setRoleId(roleId);
        tchannelM.setStatus(1);
        return searchEntityList(tchannelM);
    }
    /**
     * 根据 code roleId limit 查询通道商户号列表
     *
     * @param code 通道
     * @param roleId 终端角色
     * @param limit 限额
     * @return
     * @throws SQLException
     */
    public List<TchannelM> searchMobileTCListByCodes(Integer code, Long roleId,double limit) throws SQLException {
        TchannelM tchannelM = new TchannelM();
        tchannelM.setCode(code);
        tchannelM.setClientType(2);
        tchannelM.setRoleId(roleId);
        tchannelM.setStatus(1);
        if(limit != 0){
            tchannelM.setUseTotal(limit);
        }
        return searchEntityList(tchannelM);
    }
    /**
     * 根据 code 查询通道商户号列表
     * @param code
     * @param roleId
     * @return
     * @throws SQLException
     */
    public List<TchannelM> searchMobileTCListByCodeOrderByUseTime(Integer code,Long roleId)throws SQLException{
        TchannelM tchannelM = new TchannelM();
        tchannelM.setCode(code);
        tchannelM.setClientType(2);
        tchannelM.setRoleId(roleId);
        tchannelM.setStatus(1);
        tchannelM.setOrderByFild("TCM.USETIME");
        return searchEntityList(tchannelM);
    }
    /**
     * 根据userId查找商户号信息
     * @param userId
     * @return
     */
    public TchannelM searchTchannelMByUserId(Long userId) throws SQLException {
        TchannelM tchannelM = new TchannelM();
        tchannelM.setUserId(userId);
        return searchEntity(tchannelM);
    }

    /**
     * 更新code 修改更新第三方参数
     *
     * @param status
     * @param budengId
     * @param code
     * @return
     * @throws Exception
     */
    public int updateStatusByCode(Integer status, Long budengId, Integer code, Long roleId) throws SQLException {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("budengId", budengId);
        param.put("code", code);
        param.put("roleId", roleId);
        return this.getSqlMapClientTemplate().update("tchannelMSqlMap.updateStatusByCode", param);
    }

    /**
     * 根据终端代码  查询通道商户号
     *
     * @param code
     * @return
     * @throws SQLException
     */
    public TchannelM searchTchannelMByCode(Integer code, String mcode, String tcode) throws SQLException {
        TchannelM tcm = new TchannelM();
        tcm.setCode(code);
        tcm.setMcode(mcode);
        tcm.setTcode(tcode);
        return searchEntity(tcm);
    }

    /**
     * 修改密钥
     *
     * @param id
     * @param miyao
     * @return
     * @throws SQLException
     */
    public int updateMobileTcOtherById(Long id, String miyao) throws SQLException {
        TchannelM tcm = new TchannelM();
        tcm.setId(id);
        tcm.setOtherParam(miyao);
        return updateEntity(tcm);
    }

    /**
     * 更新 终端时间
     * @param id
     * @throws SQLException
     */
    public int updateTchannelMUseTime(Long id)throws SQLException{
        TchannelM tcm = new TchannelM();
        tcm.setId(id);
        tcm.setUseTime(new Date());
        return updateEntity(tcm);
    }

    /**
     * 更新 商户号  使用金额
     * @param id
     * @param useTotal
     * @param status
     * @return
     * @throws SQLException
     */
    public int updateTchannelMUseMoney(Long id,Double useTotal,Integer status)throws SQLException{
        TchannelM tcm = new TchannelM();
        tcm.setId(id);
        tcm.setUseTime(new Date());
        tcm.setAddUseTotal(useTotal);
        tcm.setStatus(status);
        return getSqlMapClientTemplate().update("tchannelMSqlMap.updateTchannelMUseMoney", tcm);
    }
}